<template>
    <!-- 生成一个外部包裹标签，用于初始化better-scroll -->
    <div ref="wrapper" class="scroll-wrapper">
      <slot></slot>
    </div>
  </template>
  
  <script>
  import BScroll from 'better-scroll'
  import { nextTick, onUpdated } from 'vue'
  export default {
    props: {
      /**
       * 1 滚动的时候会派发scroll事件，会截流。
       * 2 滚动的时候实时派发scroll事件，不会截流。
       * 3 除了实时派发scroll事件，在swipe的情况下仍然能实时派发scroll事件
       */
      probeType: {
        type: Number,
        default: 1
      },
      // 点击列表是否派发click事件
      click: {
        type: Boolean,
        default: true
      },
      // 是否开启横向滚动
      scrollX: {
        type: Boolean,
        default: false
      },
      // 是否派发滚动事件
      listenScroll: {
        type: Boolean,
        default: false
      },
      // 列表的数据
      scrollData: {
        type: Array,
        default: null
      },
      // 是否派发滚动到底部的事件，用于上拉加载
      pullup: {
        type: Boolean,
        default: false
      },
      // 是否派发顶部下拉的事件，用于下拉刷新
      pulldown: {
        type: Boolean,
        default: false
      },
      // 是否派发列表滚动开始的事件
      beforeScroll: {
        type: Boolean,
        default: false
      },
      // 当数据更新后，刷新scroll的延时
      refreshDelay: {
        type: Number,
        default: 20
      }
    },
    setup() {
        let bs
        nextTick(() => {
            initScrolll ()
        })
        onUpdated(() => {
            bs.refresh()
        })
        const initScrolll = () => {
            bs = new BScroll('.scroll-wrapper', {
                probeType: 3,
                click: true
            })
        }
    }
  }
  </script>
  
  <style lang="less" scoped>
    .scroll-wrapper {
      width: 100%;
      height: 100%;
      overflow: hidden;
      overflow-y: scroll;
      touch-action: pan-y;
    }
  </style>
  